home *** CD-ROM | disk | FTP | other *** search
/ Risc World 5 / Risc World 5.iso / SOFTWARE / Issue5 / PD / DIRSYNC / LegalStuff / ccres / c / Main < prev    next >
Text File  |  2004-03-20  |  5KB  |  180 lines

  1. /* Main.c
  2.    $Id: Main.c,v 1.4 2004/03/20 22:12:21 joty Exp $
  3.  
  4.    Copyright (c) 2003-2004 Dave Appleby / John Tytgat
  5.  
  6.    This file is part of CCres.
  7.  
  8.    CCres is free software; you can redistribute it and/or modify
  9.    it under the terms of the GNU General Public License as published by
  10.    the Free Software Foundation; either version 2 of the License, or
  11.    (at your option) any later version.
  12.  
  13.    CCres is distributed in the hope that it will be useful,
  14.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.    GNU General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with CCres; if not, write to the Free Software
  20.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  21.  */
  22.  
  23. /* Std C headers :
  24.  */
  25. #include <stdio.h>
  26. #include <stdlib.h>
  27. #include <string.h>
  28.  
  29. /* OSLib headers :
  30.  */
  31. #include <OSLib/proginfo.h>
  32. #include <OSLib/saveas.h>
  33. #include <OSLib/taskwindow.h>
  34. #include <OSLib/wimpreadsysinfo.h>
  35.  
  36. /* Project headers :
  37.  */
  38. #include "ccres.h"
  39.  
  40. const char achProgName[] = APPNAME;
  41.  
  42. // Toolbox action codes returned by WimpPoll - each action has an associated handler
  43. static const toolbox_action_list Action[] =
  44.   {
  45.   {{action_MENU_QUIT}},
  46.   {{action_SAVE_AS_SAVE_TO_FILE}},
  47.   {{action_SAVE_AS_SAVE_COMPLETED}},
  48.   {{action_ERROR}},
  49.   {{0}}
  50.   };
  51.  
  52. // List of handler functions for the Toolbox actions - each handler corresponds to the action in the list above
  53. static const action_handler Handler[] =
  54.   {
  55.   menu_quit,
  56.   action_save_to_file,
  57.   action_save_completed,
  58.   toolbox_error
  59.   };
  60.  
  61. // Wimp messages (except message_QUIT) that we want to receive
  62. static const wimp_message_list Message[] =
  63.   {
  64.   {{message_DATA_SAVE}},
  65.   {{message_DATA_LOAD}},
  66.   {{0}}
  67.   };
  68.  
  69.  
  70. static  BOOL ccres_initialise(PDATA data)
  71. //      =================================
  72. {
  73. data->idBaricon = toolbox_create_object(0, (toolbox_id) "Iconbar");
  74. data->idSaveAs  = toolbox_create_object(0, (toolbox_id) "SaveAs");
  75. proginfo_set_version(0, toolbox_create_object(0, (toolbox_id) "ProgInfo"), VERSION);
  76.  
  77. return TRUE;
  78. }
  79.  
  80.  
  81. static  void ccres_pollloop(PDATA data)
  82. //      ===============================
  83. {
  84.   wimp_event_no e;
  85.   int a;
  86.   bits nAction;
  87.  
  88. do {
  89.   if ((e = wimp_poll(POLL_MASK, &data->poll.wb, 0)) == toolbox_EVENT)
  90.     {
  91.     // is it a toolbox event?
  92.     // if so, look-up the action number in the Action list, then call the associated handler
  93.     nAction = data->poll.ta.action_no;
  94.     for (a = 0; a < ELEMENTS(Handler); a++)
  95.       {
  96.       if (nAction == Action[a].action_nos[0])
  97.         {
  98.         Handler[a](data);
  99.         break;
  100.         }
  101.       }
  102.     }
  103.   else if (e == wimp_USER_MESSAGE || e == wimp_USER_MESSAGE_RECORDED)
  104.     {
  105.     if ((nAction = data->poll.wb.message.action) == message_QUIT || nAction == message_SHUTDOWN)
  106.       data->fRunning = FALSE;
  107.     else if (nAction == message_DATA_SAVE)
  108.       message_data_save(data);
  109.     else if (nAction == message_DATA_LOAD)
  110.       message_data_load(data);
  111.     }
  112.   } while (data->fRunning);
  113. }
  114.  
  115.  
  116.         int main(int argc, PSTR argv[])
  117. //      ===============================
  118. {
  119.   static char achSyntax[] = "Wrong number of arguments - Syntax: !CCres <infile> <outfile>";
  120.   bits nFileType;
  121.   int nVersion;
  122.   messagetrans_control_block cb;
  123.   DATA data;
  124.   os_error * perr;
  125.  
  126. memset(&data, 0, sizeof(data));
  127. if (argc == 1
  128.     && wimpreadsysinfo_desktop_state() == wimpreadsysinfo_STATE_DESKTOP
  129.     && !taskwindowtaskinfo_window_task())
  130.   {
  131.   if (!is_running())
  132.     {
  133.     log_on();
  134.     MyAlloc_Init();
  135.     if ((perr = xtoolbox_initialise(0, 310, Message, Action, APPDIR, &cb, &data.tb, &nVersion, &data.task, &data.pSprites)) != NULL)
  136.       error("%s  OR if using from the command line  %s", perr->errmess, achSyntax);
  137.     else
  138.       {
  139.       data.fRunning = ccres_initialise(&data);
  140.       ccres_pollloop(&data);
  141.       wimp_close_down(data.task);
  142.       }
  143.  
  144.     if (data.pszIn != NULL)
  145.       MyFree(data.pszIn);
  146.     MyAlloc_Report();
  147.     }
  148.   }
  149. else if (argc == 3)
  150.   {
  151.   log_on();
  152.   MyAlloc_Init();
  153.   if (((nFileType = my_osfile_filetype(argv[1])) == osfile_TYPE_TEXT
  154.        || nFileType == osfile_TYPE_RESOURCE
  155.        || nFileType == osfile_TYPE_TEMPLATE)
  156.       && load_file(&data, argv[1], nFileType))
  157.     convert(&data, argv[2]);
  158.   else if (nFileType == osfile_TYPE_UNTYPED)
  159.     error("File not found '%s'", argv[1]);
  160.   else
  161.     error("Not a valid file type '%s'", argv[1]);
  162.  
  163.   if (data.pszIn != NULL)
  164.     MyFree(data.pszIn);
  165.  
  166.   MyAlloc_Report();
  167.   }
  168. else
  169.   {
  170.   fprintf(stderr, "CCres " VERSION "\n"
  171.                   "Convertor between RISC OS Toolbox Resource (filetype &FAE) & Wimp Template (filetype &FEC) files to and from text format.\n"
  172.                   "Syntax: CCres <infile> <outfile>\n"
  173.                   "  <infile>  : either Template, Resource or Text file\n"
  174.                   "  <outfile> : output Text file (case <infile> is a Template or Resource file) or output Template/Resource file (case <infile> is a Text file)\n");
  175.   return EXIT_FAILURE;
  176.   }
  177.  
  178. return EXIT_SUCCESS;
  179. }
  180.